package com.sinog.alarm.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import java.util.List;

/**
 * @desc FastJson工具类
 * @author zy
 * @date 2019年6月20日 15点48分
 */
public final class JsonUtil {

    private static final SerializeConfig CONFIG;
    private static final String DATEFORMAT;

    static {
        DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
        CONFIG = new SerializeConfig();
        // 自定义日期
        CONFIG.put(java.util.Date.class,new SimpleDateFormatSerializer(DATEFORMAT));
        CONFIG.put(java.sql.Date.class,new SimpleDateFormatSerializer(DATEFORMAT));
    }

    private static final SerializerFeature[] FEATURES = {
            // 输出空置字段
            SerializerFeature.WriteMapNullValue,
            // list字段如果为null，输出为[]，而不是null
            SerializerFeature.WriteNullListAsEmpty,
            // 数值字段如果为null，输出为0，而不是null
            SerializerFeature.WriteNullNumberAsZero,
            // Boolean字段如果为null，输出为false，而不是null
            SerializerFeature.WriteNullBooleanAsFalse,
            // 字符类型字段如果为null，输出为""，而不是null
            SerializerFeature.WriteNullStringAsEmpty};

    /**
     * json对象转字符串
     * @param object object
     * @return String
     */
    public static String toText(Object object) {
        return JSON.toJSONString(object,CONFIG,FEATURES);
    }

    /**
     * json字符串转某对象
     * @param text json字符串
     * @param clazz clazz
     * @param <T> 范型
     * @return <T>
     */
    public static <T> T toBean(String text,Class<T> clazz) {
        return JSON.parseObject(text,clazz);
    }

    /**
     * json字符串转换为某对象List
     * @param text json字符串
     * @param clazz clazz
     * @param <T> 范型
     * @return <T>
     */
    public static <T> List<T> toList(String text,Class<T> clazz) {
        return JSON.parseArray(text,clazz);
    }
}